# -*- coding: utf-8 -*-
# @Time: 2023/5/9 21:50
# @Author: 李卓
# @File: matrix_test.py

def rotate(matrix):
    # 需要转换的数组的长度
    matrix_len = len(matrix)
    # 生成一个全为0的数组，维度和需要转换的数组一样，里面存放转换后的数据，即结果数组
    res_matrix = [([0] * matrix_len) for i in range(matrix_len)]
    print("需要转换的数组：", matrix)

    # 遍历源数组的每一个格子，从上至下，从左至右
    # 将当前格子的数据赋值给结果数组
    """
        规律：
            假设数组维度为n
            原数组的(a, b)格子  需要赋值给  结果数组的(n-b, a)格子  如下

            1  2        2  4 
            3  4        1  3
            第1格:   1,1  ->  2,1
            第2格:   1,2  ->  1,1
            第3格:   2,1  ->  2,2
            第4格:   2,2  ->  1,2
            
            1 2 3       3 6 9
            4 5 6       2 5 8
            7 8 9       1 4 7
            第1格:   1,1  ->  3,1
            第2格:   1,2  ->  2,1
            第3格:   1,3  ->  1,1
            第4格:   2,1  ->  3,2
            ...
            
            按规律   a,b  ->  n-b,a
    """
    # 代码如下
    for row_index in range(matrix_len):
        for col_index in range(matrix_len):
            # 由于range是从0开始的，并且数组下标也是从0开始的，但是数组维度是从1开始计算的，这里数组维度要减去1
            res_matrix[matrix_len - 1 - col_index][row_index] = matrix[row_index][col_index]
    return res_matrix


if __name__ == '__main__':
    source_matrix = [[1, 2], [3, 4]]
    res_matrix = rotate(source_matrix)
    print("转换后的数组：", res_matrix)

    source_matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
    res_matrix = rotate(source_matrix)
    print("转换后的数组：", res_matrix)

    source_matrix = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]]
    res_matrix = rotate(source_matrix)
    print("转换后的数组：", res_matrix)
